package main

var globalName = "GO语言"

// 错误声明
// g := "测试"

func getUserInfo() (string, int) {
	return "张三", 10
}

func main() {
	println("声明变量")
	/**
	1, var 声明变量
	var 变量名 类型
	由数字/字符和下划线组成, 变量首个字符不能是字符.
	关键字不能作为变量名.
	*/
	//var username string
	//// 变量声明后没有初始话得花, 值为空
	//println(username)
	//var a1 = "张三"
	//println(a1)
	//
	//// go语言变量的定义与初始化
	//var name string
	//name = "张三"
	//println(name)
	//// 第二种方式
	//var name2 string = "李四"
	//println(name2)
	//
	//// 推荐方式,类型自动推导
	//var name3 = "赵五"
	//println(name3)
	//
	//var name4 = "哈哈"
	//var age = 20
	//var sex = "男"
	//println(name4, age, sex)

	/**
	一次声明多个变量
	var 变量名, 变量名 类型

	var (
		变量名称 类型
		变量名称 类型
	)
	*/
	//var a1, a2 string
	//a1 = "aa"
	//a2 = "bb"
	//println(a1, a2)

	//var (
	//	username string
	//	age      int
	//	sex      string
	//)
	//
	//username = "测试"
	//age = 20
	//sex = "女"
	//println(username, age, sex)

	//var (
	//	username string = "张三"
	//	age      int    = 10
	//	sex      string = "男"
	//)
	//println(username, age, sex)

	/**
	3. 短变量声明发 在函数内部声明, 可以使用更简略的 := 方式声明并初始化变量
	注意: 短变量只能用于声明局部变量, 不能用于全局变量声明
	*/
	//var name = "测试"
	//name := "测试"
	//fmt.Printf("name类型为%T", name)

	// 使用短变量一次声明多个变量
	//a, b, c := 12, 13, "14"
	//println(a, b, c, globalName)

	/**
	匿名变量, 在使用多重赋值时, 如果想要忽略某个值, 可以使用匿名变量 (anonymous variable)
	匿名变量用一个下划线_表示
	匿名变量不会占用命名空间, 不会分配内存, 所以匿名变量之间不存在重复声明.
	*/

	//var username, age = getUserInfo()
	//println(username, age)

	// 忽略age返回值
	var username, _ = getUserInfo()
	println(username)

	var _, age = getUserInfo()
	println(age)
}
